package com.fortune.service.impl;

import com.fortune.common.paging.PagingData;
import com.fortune.dao.PRoleDao;
import com.fortune.dto.in.pRole.PRoleAddDto;
import com.fortune.dto.in.pRole.PRoleEditDto;
import com.fortune.dto.in.pRole.PRoleListDto;
import com.fortune.dto.in.pRole.PRolePermissionDto;
import com.fortune.entity.PPosition;
import com.fortune.exception.db.InsertInnerErrorException;
import com.fortune.service.PRoleService;
import com.fortune.vo.pRole.PRole;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class PRoleServiceImpl implements PRoleService {
    @Autowired
    private PRoleDao pRoleDao;

    /**
     * 岗位列表
     * @param listDto
     * @return
     */
    @Override
    public PagingData<PRole> listMRoles(PRoleListDto listDto) {
        List<PRole> roles = pRoleDao.listMRoles(listDto);
        int count = pRoleDao.countRoles(listDto);
        PagingData<PRole> data = new PagingData<>();
        data.setData(roles);
        data.setRecordsTotal(count);
        return data;
    }

    /**
     * 通过名字查重
     * @param name
     * @return
     */
    @Override
    public PPosition getPositionByName(String name) {
        return pRoleDao.getPositionByName(name);
    }

    /**
     * 添加岗位
     * @param pRoleAddDto
     * @return
     */
    @Override
    public int insertRole(PRoleAddDto pRoleAddDto) {
        return pRoleDao.insertRole(pRoleAddDto);
    }

    /**
     * 通过岗位id查是否存在
     * @param roleId
     * @return
     */
    @Override
    public PPosition getPositionByRoleId(String roleId) {
        return pRoleDao.getPositionByRoleId(roleId);
    }

    /**
     * 通过岗位id和岗位名称查是否存在
     * @param name
     * @param roleId
     * @return
     */
    @Override
    public PPosition getPositionByNameAndRoleId(String name, String roleId) {
        return pRoleDao.getPositionByNameAndRoleId(name,roleId);
    }

    /**
     * 编辑岗位
     * @param editDto
     * @return
     */
    @Override
    public int updateRole(PRoleEditDto editDto) {
        return pRoleDao.updateRole(editDto);
    }

    /**
     * 删除岗位
     * @param roleId
     * @return
     */
    @Override
    public int deleteRole(String roleId) {
        return pRoleDao.deleteRole(roleId);
    }

    /**
     * 添加权限
     * @param pRolePermissionDto
     * @return
     */
    @Override
    public int insertPermissions(PRolePermissionDto pRolePermissionDto) {
        int result = pRoleDao.queryRolePermissionsExist(pRolePermissionDto.getPositionId());
        if (result > 0){
            result = pRoleDao.deletePermissionsByRoleId(pRolePermissionDto.getPositionId());
            if (result < 1) {
                throw new InsertInnerErrorException("添加权限失败");
            }
        }
        int exsistPermissionCount = pRoleDao.countExsistPermissionCount(pRolePermissionDto.getpPermissionAddDtos());
        if (exsistPermissionCount!=pRolePermissionDto.getpPermissionAddDtos().size()) {
            throw new InsertInnerErrorException("不能给岗位赋予不存在的权限或重复的权限");
        }
        result = pRoleDao.insertRolePermissions(pRolePermissionDto.getpPermissionAddDtos(),pRolePermissionDto.getPositionId());
        if (result!=pRolePermissionDto.getpPermissionAddDtos().size()) {
            throw new InsertInnerErrorException("添加权限失败");
        }
        return result;
    }

    @Override
    public int queryUserByRoleId(String roleId) {
        return pRoleDao.queryUserByRoleId(roleId);
    }

}
